home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / cdplay / src / grp.c < prev    next >
Text File  |  1991-10-18  |  6KB  |  223 lines

  1. /* << High C V1.4 >> **********************************************************
  2. **
  3. **    グラフィックルーチン
  4. **
  5. **    1991.03.02 : CREATE
  6. **    1991.03.02 : FINISH
  7. **
  8. **    < HISTORY >
  9. **    1991.03.02 : CREATE
  10. **
  11. **    < note > : TABS = 4
  12. **
  13. **    All Rights Reserved, Copyright (C) Y.Hirata 1991.
  14. **
  15. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  16. **
  17. ******************************************************************************/
  18.  
  19. #include <string.h>
  20. #include <msdos.cf>
  21. #include <egb.h>
  22. #include "grp.h"
  23.  
  24. /*=============================================================================
  25. **    使用上の注意事項
  26. **
  27. **    1. 描画モードや色の設定は、あらかじめ行っておいて下さい.
  28. **        EGB_paintMode() ;
  29. **        EGB_writeMode() ;
  30. **        EGB_color() ;
  31. =============================================================================*/
  32.  
  33. /******************************  描画領域設定  *******************************/
  34. void viewport( char *egbwork,int x1,int y1,int x2,int y2 )
  35. /*=============================================================================
  36. **    描画領域(ビューポート)の設定を行う.
  37. **
  38. **    < INPUT  > : x1,y1 左上座標
  39. **               : x2,y2 右下座標
  40. **    < OUTPUT > : EGBライブラリ用作業域
  41. **    < RETURN > : なし
  42. =============================================================================*/
  43. {
  44.     struct {
  45.         short    x1, y1, x2, y2 ;
  46.     } pview ;                                    /*  描画領域設定用            */
  47.  
  48.     pview.x1 = x1 ;
  49.     pview.y1 = y1 ;
  50.     pview.x2 = x2 ;
  51.     pview.y2 = y2 ;
  52.  
  53.     EGB_viewport( egbwork,(char *)&pview ) ;
  54. }
  55.  
  56. /********************************  テキスト表示  *********************************/
  57. void disptext( char *egbwork,short x,short y,char *s )
  58. /*=============================================================================
  59. **    前景色で文字列の表示を行う.
  60. **
  61. **    < INPUT  > : x,y 表示座標
  62. **               : s   文字列格納先頭アドレス
  63. **    < OUTPUT > : EGBライブラリ用作業域
  64. **    < RETURN > : なし
  65. =============================================================================*/
  66. {
  67.     struct {
  68.         short    x, y, len ;
  69.         char    s[81] ;
  70.     } ptext ;                                    /*  テキスト表示用                */
  71.  
  72.     ptext.x = x ;
  73.     ptext.y = y ;
  74.     ptext.len = strlen( s ) ;
  75.     if ( ptext.len > 80 ) {
  76.         strncpy( ptext.s,s,80 ) ;
  77.         ptext.s[80] = '\0' ;
  78.         ptext.len = 80 ;
  79.     } else {
  80.         strcpy( ptext.s,s ) ;
  81.     }
  82.     EGB_sjisString( egbwork,(char *)&ptext ) ;    
  83. }
  84.  
  85. /******************************  矩形領域取得  *******************************/
  86. void get( char *egbwork,int x1,int y1,int x2,int y2,unsigned int p,int bpp )
  87. /*=============================================================================
  88. **    矩形領域のデータ取得を行う.
  89. **
  90. **    < INPUT  > : x1,y1 左上座標
  91. **               : x2,y2 右下座標
  92. **               : p     データ格納領域先頭アドレス
  93. **               : bpp   1ドット当たりのピクセル数
  94. **    < OUTPUT > : EGBライブラリ用作業域
  95. **    < RETURN > : なし
  96. =============================================================================*/
  97. {
  98.     struct {
  99.         unsigned int    p ;
  100.         short    dseg, x1, y1, x2, y2 ;
  101.     } pgetput ;                                    /*  EGB GET/PUT用            */
  102.  
  103.     pgetput.p    = p ;
  104.     pgetput.dseg = getds() ;
  105.     pgetput.x1   = x1 ;
  106.     pgetput.y1   = y1 ;
  107.     pgetput.x2   = x2 ;
  108.     pgetput.y2   = y2 ;
  109.  
  110.     if ( bpp == 1 ) {                            /* 2色モードの時        */
  111.         EGB_getBlockColor( egbwork,(char *)&pgetput ) ;
  112.     } else {                                    /* 多色モードの時        */
  113.         EGB_getBlock( egbwork,(char *)&pgetput ) ;
  114.     }
  115. }
  116.  
  117. /******************************  矩形領域設定  *******************************/
  118. void put( char *egbwork,int x1,int y1,int x2,int y2,unsigned int p,int bpp )
  119. /*=============================================================================
  120. **    矩形領域にデータを書き込む.
  121. **
  122. **    < INPUT  > : x1,y1 左上座標
  123. **               : x2,y2 右下座標
  124. **               : p     データ格納領域先頭アドレス
  125. **               : bpp   1ドット当たりのピクセル数
  126. **    < OUTPUT > : EGBライブラリ用作業域
  127. **    < RETURN > : なし
  128. =============================================================================*/
  129. {
  130.     struct {
  131.         unsigned int    p ;
  132.         short    dseg, x1, y1, x2, y2 ;
  133.     } pgetput ;                                    /*  EGB GET/PUT用            */
  134.  
  135.     pgetput.p    = p ;
  136.     pgetput.dseg = getds() ;
  137.     pgetput.x1   = x1 ;
  138.     pgetput.y1   = y1 ;
  139.     pgetput.x2   = x2 ;
  140.     pgetput.y2   = y2 ;
  141.  
  142.     if ( bpp == 1 ) {                            /* 2色モードの時        */
  143.         EGB_putBlockColor( egbwork,0,(char *)&pgetput ) ;
  144.     } else {                                    /* 多色モードの時        */
  145.         EGB_putBlock( egbwork,0,(char *)&pgetput ) ;
  146.     }
  147. }
  148.  
  149. /********************************  直線描画  *********************************/
  150. void line( char *egbwork,int x1,int y1,int x2,int y2 )
  151. /*=============================================================================
  152. **    2点間を結ぶ直線を描く.
  153. **
  154. **    < INPUT  > : x1,y1 1点目の座標
  155. **               : x2,y2 2点目の座標
  156. **    < OUTPUT > : EGBライブラリ用作業域
  157. **    < RETURN > : なし
  158. =============================================================================*/
  159. {
  160.     struct {
  161.         short    n ;
  162.         short    x1, y1, x2, y2 ;
  163.     } pline ;                                    /*  直線表示用                */
  164.  
  165.     pline.n  = 2 ;
  166.     pline.x1 = x1 ;
  167.     pline.y1 = y1 ;
  168.     pline.x2 = x2 ;
  169.     pline.y2 = y2 ;
  170.  
  171.     EGB_connect( egbwork,(char *)&pline ) ;
  172. }
  173.  
  174. /********************************  矩形描画  *********************************/
  175. void box( char *egbwork,int x1,int y1,int x2,int y2 )
  176. /*=============================================================================
  177. **    矩形を描く.
  178. **
  179. **    < INPUT  > : x1,y1 左上座標
  180. **               : x2,y2 右下座標
  181. **    < OUTPUT > : EGBライブラリ用作業域
  182. **    < RETURN > : なし
  183. =============================================================================*/
  184. {
  185.     struct {
  186.         short    x1, y1, x2, y2 ;
  187.     } pbox ;                                    /*  矩形表示用                */
  188.  
  189.     pbox.x1 = x1 ;
  190.     pbox.y1 = y1 ;
  191.     pbox.x2 = x2 ;
  192.     pbox.y2 = y2 ;
  193.  
  194.     EGB_rectangle( egbwork,(char *)&pbox ) ;
  195. }
  196.  
  197. /*******************************  三角形描画  ********************************/
  198. void triangle( char *egbwork,int x1,int y1,int x2,int y2,int x3,int y3 )
  199. /*=============================================================================
  200. **    3点を結ぶ三角形を描く.
  201. **
  202. **    < INPUT  > : x1,y1 1点目の座標
  203. **               : x2,y2 2点目の座標
  204. **               : x3,y3 3点目の座標
  205. **    < OUTPUT > : EGBライブラリ用作業域
  206. **    < RETURN > : なし
  207. =============================================================================*/
  208. {
  209.     struct {
  210.         short    x1, y1, x2, y2, x3, y3 ;
  211.     } ptriangle ;                                /*  三角形表示用            */
  212.  
  213.     ptriangle.x1 = x1 ;
  214.     ptriangle.y1 = y1 ;
  215.     ptriangle.x2 = x2 ;
  216.     ptriangle.y2 = y2 ;
  217.     ptriangle.x3 = x3 ;
  218.     ptriangle.y3 = y3 ;
  219.  
  220.     EGB_triangle( egbwork,(char *)&ptriangle ) ;
  221. }
  222.  
  223.